#include<iostream>
#include<vector>
#include "Frame.h"

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
    
using namespace std;
 
     /* Flag set by ‘--verbose’. */
static int verbose_flag;

int main (int argc, char **argv) {


	float minx=-12.,maxx=12.,miny=-90.,maxy=90.;
	char *device = (char *) "/xw";
	vector<char *> filenames;
	char c;
	while (1)
	{
		static struct option long_options[] =
		{
			/* These options set a flag. */
			{"verbose", no_argument,       &verbose_flag, 1},
			{"brief",   no_argument,       &verbose_flag, 0},
			/* These options don't set a flag.
			   We distinguish them by their indices. */
			{"minx",  optional_argument,      0, 'x'},
			{"maxx",  optional_argument,       0, 'X'},
			{"miny",  optional_argument, 0, 'y'},
			{"maxy",  optional_argument, 0, 'Y'},
			{"device",optional_argument, 0, 'd'},
			{0, 0, 0, 0}
		};
		/* getopt_long stores the option index here. */
		int option_index = 0;

		c = getopt_long (argc, argv, "x:X:y:Y:d:",
				long_options, &option_index);

		/* Detect the end of the options. */
		if (c == -1)
			break;

		switch (c)
		{
			case 0:
				/* If this option set a flag, do nothing else now. */
				if (long_options[option_index].flag != 0)
					break;
				printf ("option %s", long_options[option_index].name);
				if (optarg)
					printf (" with arg %s", optarg);
				printf ("\n");
				break;

			case 'x':
				minx = atof(optarg);
				break;

			case 'X':
				maxx = atof(optarg);;
				break;

			case 'y':
				miny = atof(optarg);
				break;

			case 'Y':
				maxy = atof(optarg);
				break;

			case 'd':
				device = strdup(optarg);
				break;

			case '?':
				/* getopt_long already printed an error message. */
				break;

			default:
				abort ();
		}
	}
	if (optind < argc)
	{
           printf ("non-option ARGV-elements: ");
	   while (optind < argc)
		   filenames.push_back(strdup(argv[optind++]));
	}

	for (unsigned int i = 0; i < filenames.size() ; i++ ) {

		Frame Framefile((char *) filenames[i]);
		if (verbose_flag == 1)
			Framefile.Render->verbose = true;
		Framefile.Render->set_device(device);
		Framefile.Render->init();
		Framefile.Render->set_window(minx,maxx,miny,maxy);

		Framefile.Render->draw_frame();
		Framefile.Render->draw_pixels(Framefile.Data);
 	
	}
	exit(EXIT_SUCCESS);
}


